/****************************************************************
 **                                                             *
 ** Nombre: GestorPresentacionEncuestaHabitosEstudio.java       *
 ** Versión: 1.0.0                                              *
 ** Autor: Alberto de Jesús Castro Becerra                      *
 ** Creado: 6-abril-2013                                        *
 ** Modificado:                                                 *
 ** Diagrama: GAPI v4.7.1                                       *
 ** Caso de uso: MPE2                                           *
 ****************************************************************/
package Servicios;

import DAO.DAOPreguntasEHE;
import DAO.DAORespuestasEHE;
import Dominio.PosibleRespuestaEHE;
import Dominio.PreguntaEHE;
import Dominio.RespuestaEHE;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Proporciona los servicios para la presentación de la encuesta de hábitos de estudio del alumno.
 * @author Alberto
 */
public class GestorPresentacionEncuestaHabitosEstudio extends HttpServlet {

    private final String BUSCAR_TODAS_LAS_PREGUNTAS_DE_LA_EHE = "buscarTodasLasPreguntasDeEHE";
    private final String REGISTRAR_RESPUESTAS = "registrarRespuestas";

    /**
     * Responde las peticiones recibidad por GET y POST, genera la respuesta adecuada para ser mostrada al usuario.
     * @param request Petición del servlet
     * @param response Respuesta del servlet
     * @throws ServletException Si ocurre algún problema cono el servlet.
     * @throws IOException  Si ocurre algún problema de lectura/escritura
     */
     protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String peticion = request.getParameter("id");

        if (peticion != null) {

            if (peticion.equals(BUSCAR_TODAS_LAS_PREGUNTAS_DE_LA_EHE)) {
                buscarTodasLasPreguntasDeLaEHE(request, response);
            } else if (peticion.equals(REGISTRAR_RESPUESTAS)) {
                registrarRespuestas(request, response);
            } else {
                out.println("Ocurrio un error al procesar la peticion");
            }
        } else {
            out.println("Ocurrio un error al procesar la peticion");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * Obtiene las preguntas de la encuesta de hábitos de estudio y prepara
     * una respuesta con las mismas en forma de formulario.
     * @param request Petición del servlet.
     * @param response Respuesta del servlet.
     */
    private void buscarTodasLasPreguntasDeLaEHE(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter out = null;
        try {
            out = response.getWriter();
            String respuesta = "<h1>ENCUESTA DE HABITOS DE ESTUDIO</h1></br>";
            DAOPreguntasEHE daoPreguntasEHE = new DAOPreguntasEHE();
            ArrayList<PreguntaEHE> listaPreguntasEHE = daoPreguntasEHE.buscarTodasLasPreguntasEHE();
            daoPreguntasEHE.cerrarConexionAPreguntasEHE();

            if (!listaPreguntasEHE.isEmpty()) {

                respuesta += "<div class=\"contenedorFormularioGeneral\">"    
                           + "<table>"
                           + "<th>"
                           +"Pregunta"
                           + "</th>"
                           + "<th>"
                           +"Respuesta"
                           + "</th>";
                
                for (int i = 0; i < listaPreguntasEHE.size(); i++) {
                    respuesta += "<tr>";
                    
                    PreguntaEHE preguntaEHE = listaPreguntasEHE.get(i);
                    int clavePregunta = preguntaEHE.getClavePregunta();
                    String pregunta = preguntaEHE.getPregunta();

                    respuesta += "<td>"+ pregunta + "</td>";
                    respuesta += "<td><select id=\"" + clavePregunta + "\">";
                    ArrayList<PosibleRespuestaEHE> listaPosiblesRespuestas = preguntaEHE.getListaPosiblesRespuestas();

                    respuesta += "  <option value=\"0\">Seleccione</option>";
                    
                    for (int j = 0; j < listaPosiblesRespuestas.size(); j++) {
                        PosibleRespuestaEHE posibleRespuestaEHE = listaPosiblesRespuestas.get(j);
                        String posibleRespuesta = posibleRespuestaEHE.getRespuesta();

                        respuesta += "  <option value=\"" + (j + 1) + "\">" + posibleRespuesta + "</option>";
                    }
                    respuesta += "</select></td>";
                    respuesta += "</tr>";
                }
                respuesta += "</table>";                
                respuesta += "<input type=\"button\" id=\"registrarRespuestasEHE\"/ value=\"Registrar respuestas\">";
                respuesta += "</div>";
            } else {
                respuesta = "No se encontraron preguntas de la encuesta";
            }

            out.println(respuesta);
        } catch (IOException ex) {
            Logger.getLogger(GestorPresentacionEncuestaHabitosEstudio.class.getName()).log(Level.SEVERE, null, ex);
            out.println("Ocurrio un error al procesar la peticion");
        } finally {
            out.close();
        }
    }

    /**
     * Registra las respuestas del alumno sobre la encuesta de hábitos de estudio.
     * @param request Petición del servlet.
     * @param response  Respuesta del servlet.
     */
    private void registrarRespuestas(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter out = null;
        try {
            out = response.getWriter();

            HttpSession sesion = request.getSession();
            sesion.setAttribute("asignaturas", null);
            
            String nombreUsuario = request.getSession().getAttribute("nombreUsuario").toString();
            String parametrosID = request.getParameter("parametrosID");
            String parametrosValores = request.getParameter("parametrosValores");

            if (nombreUsuario != null && parametrosID != null && parametrosValores != null && !parametrosID.isEmpty() && !parametrosValores.isEmpty()) {

                ArrayList<RespuestaEHE> listaRespuestasEHERecibidasDelCliente = new ArrayList<RespuestaEHE>();

                StringTokenizer separadorID = new StringTokenizer(parametrosID, ",");
                StringTokenizer separadorValores = new StringTokenizer(parametrosValores, ",");

                while (separadorID.hasMoreTokens() && separadorValores.hasMoreTokens()) {
                    int idPreguntaEHE = Integer.parseInt(separadorID.nextToken());
                    int respuesta = Integer.parseInt(separadorValores.nextToken());

                    PreguntaEHE preguntaEHE = new PreguntaEHE();
                    preguntaEHE.setClavePregunta(idPreguntaEHE);

                    RespuestaEHE respuestaEHE = new RespuestaEHE();
                    respuestaEHE.setNombreUsuario(nombreUsuario);
                    respuestaEHE.setRespuesta(respuesta);
                    respuestaEHE.setPreguntaEHE(preguntaEHE);

                    listaRespuestasEHERecibidasDelCliente.add(respuestaEHE);
                }


                DAORespuestasEHE daoRespuestasEHE = new DAORespuestasEHE();
                daoRespuestasEHE.registrarRespuestasDeAlumno(listaRespuestasEHERecibidasDelCliente); 
                daoRespuestasEHE.cerrarConexionARespuestasEHE();
                out.println("Respuestas registradas exitosamente");

            } else {
                out.println("Ocurrio un error al procesar la peticion");
            }


        } catch (IOException ex) {
            Logger.getLogger(GestorPresentacionEncuestaHabitosEstudio.class.getName()).log(Level.SEVERE, null, ex);
            out.println("Ocurrio un error al procesar la peticion");
        } finally {
            out.close();
        }
    }
}
